|
![](/i/fill.gif) |
I've had an interesting thought about what
should be the "top level" object in an OO
scene for raytracing. In one sense it is
the camera, since all the rays originate
from it. Otherwise, you can have a glorified
Union container, perhaps with global
parameters tacked on. One interesting
alternative is treating the top level
object as a 2D texture. A camera naturally
maps 3D rays to the 2D texture, but allows
procedural textures, blending, even camera-
motion blur, for each pixel.
To implement camera-motion blur, you put
maybe 20 cameras and average the result for
each pixel, perhaps multiplied by a brightness
channel for fade in.out, etc.
Simply: PovCamera is a PovProceduralTexture
> How about a PovWorld or a PovScene object?
PovScene (is a PovParsable)
Container class for a world or scene. Global
parameters, cameras, fog, clock, etc live here.
A PovScene may contain any number of camera's
that are selectable without editing the scene
file, perhaps from the command line.
Methods:
void setTime(double time);
double getTime();
bool selectCamera(int cameraIndex);
bool selectCamera(char *label);
vector<PovCamera> &cameras();
Notes:
Associate the whole scene with a transform?
Allow encapsulation of scenes within scenes?
- If a ray enters a room, model the room as
a seperate scene?
- If we're watching TV, allow TV to be an
independent scene?
> We could also use subclasses of PovCanvas
> like PovZbuffer, PovAlphaChannel...
PovZbuffer (is a PovCanvas)
Can be used as an alternative to an RGB
canvas, stores the distance for each ray,
rather than performing shading, lighting,
etc.
PovAlphaChannel (is a ????)
Notes:
Where does alpha channel fit? Is it simply
the degree of "background" that shows for
each pixel, or is it something more? Perhaps
alpha channel should be an optional extention
of PovCanvas.
Post a reply to this message
|
![](/i/fill.gif) |